<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>navistore : API documentation</title>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
    <link href="apidocs.css" type="text/css" rel="stylesheet" />
    
    
  </head>
  <body>
    <h1 class="package">navistore : package documentation</h1>
    <p>
      <span id="part"></span>
      
      
    </p>
    <div>
      
    </div>
    <div><p>Navistore:</p>
<ul>
  <li>
    A reference key value store engine written in Python, using 
    twisted.web.
  </li>
  <li>
    Very simply coded, easy to study.
  </li>
  <li>
    Uses proven components for critical path; hence
  </li>
  <li>
    Not just an example, can be used in production.
  </li>
  <li>
    Supports replication.
  </li>
  <li>
    Has the author's name in its own name, reversed.
  </li>
</ul>
<p>Navistore is an example implementation of a key/value HTTP rest api 
storage engine. It is loosely coupled, and revolves mainly around a 
reference interface specification that defines the API a storage backend 
needs to support, if to be used by Navistore. Since using twisted.web for 
network support, it deals mainly with the logic one can put into a server 
implementation, examplified with replication support that Navistore 
has.</p>
<p>Navistore was designed with testability in mind, and hence already 
contains a test suite that backend implementors can 'plugin' to in order to
make sure their backend is compliant with the interface.</p>
<p>Navistore was developed through a Test Driven Development process; this 
greatly enabled good design and easier process in development iterations, 
but took more time at start of development for design of APIs and interface
as a result of tests design.</p>
<p>Design followed the following delimitations:</p>
<ul>
  <li>
    Navistore is used inside a LAN, so no need to deal with authentication.
  </li>
  <li>
    The LAN usecase allowed for a rather naive replication implementation, 
    that might not hold in deployment across WANs due to latency.
  </li>
  <li>
    Replication strategy assumes no issue with bandwidth; e.g. LAN usecase.
  </li>
  <li>
    Access to specific value is mostly done by the same specific client 
    over time, this is mainly due to the sqlite3 backend, but can be easily
    improved with adding support for highly concurrent MVCC stores like 
    CouchDB. The current implementation does not try to answer MVCC problem
    domain, as this is a subject for great research and years of 
    development and is already addressed by available market solutions.
  </li>
  <li>
    twisted is performant enough and robust to handle load given a backend 
    does not block or is latent in handling reads/writes.
  </li>
</ul>
<p>There is currently only one backend provided, that uses sqlite3 for the 
actual data storage. However, given the defined interface and the reference
backend as a base point, it shouldn't be hard to add more backends. sqlite3
was chosen as it is concurrent and performant given transactions are kept 
short and small, which Navistore follows as well. Sqlite is also a good 
reference point since using the DBI 2.0 specification one can upgrade to an
enterprise grade database server with a change of a mere connection 
string!</p>
<p>The Navistore package contains:</p>
<ul>
  <li>
    nhttpserver: A twisted.web based server script that implements the rest
    api and does the actual serving of values by keys through HTTP. To 
    learn about the definition of the rest API, look at the respective 
    test, testHttpBackend.
  </li>
  <li>
    backend: This subpackage holds all backend code that nhttpserver uses, 
    including tests.
  </li>
</ul>
<table class="fieldTable"></table></div>

    
    
    <div id="splitTables">
      <table class="children sortable" id="id1">
  
  
<tr class="package">
    
    
    <td>Package</td>
    <td><a href="navistore.backend.html">backend</a></td>
    <td><span>Backend package. Everything related to the backend is under this 
package.</span></td>
  </tr>
  
</table>
      
      
    </div>
    
    
    

    
    <address>
      <a href="index.html">API Documentation</a> for navistore, generated by <a href="http://codespeak.net/~mwh/pydoctor/">pydoctor</a> at 2010-11-13 15:44:55.
    </address>
  </body>
</html>